﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;
using System.Data;

namespace senac.update.helpdesk
{
    public partial class HelpSolicitacoes : System.Web.UI.Page
    {
        private DataTable dtSenac = null;
        private DataTable dtFaculdade = null;

        protected void Page_Load(object sender, EventArgs e)
        {
#if teste
            if (Session["chapa"] == null)
            {
                Response.Redirect("../mensagens_sistema.aspx?id_mensagem=2");
            }
            else
            {
#endif
            dtSenac = new DataTable();
            dtFaculdade = new DataTable();
            CarregarTabelasDropDownList();

                if (!Page.IsPostBack)
                {
                    try
                    {
                        this.ddCodCategoriaProblema.DataSource = dtSenac;
                        this.ddCodCategoriaProblema.DataValueField = "CodCategoriaProblema";
                        this.ddCodCategoriaProblema.DataTextField = "CategoriaProblema";
                        this.ddCodCategoriaProblema.DataBind();

                        string[] nomeComputador = System.Net.Dns.GetHostEntry(Request.ServerVariables["remote_addr"].ToString()).HostName.Split('.');
                        txtNomeMaquina.Text = nomeComputador[0].ToUpper();
                    }
                    catch (Exception)
                    {
                        txtNomeMaquina.Text = "";
                    }
                    txtIP.Text = Request.ServerVariables["REMOTE_ADDR"].ToString();

#if teste
                    if (Session["cod_lotacao"].ToString() == "14")
                    {
                        lblLinkSolicitarPOutraPessoa.Visible = true;
                        lblLinkSolicitarPOutraPessoa.Text = "(<a href=\"#\" onclick=\"window.open('selecionarfuncionario.aspx','','width=425px,height=150px')\">Solicitar por outra pessoa</a>)";
                    }

                    lblSolicitadoPor.Text = Session["nome"].ToString();
                    hfChapa.Value = Session["chapa"].ToString();
#endif
                    lblSolicitadoPor.Text = "TESTE";
                    hfChapa.Value = "12345";
                }
#if teste
            }
#endif
        }
        protected void bCadastrar_Click(object sender, ImageClickEventArgs e)
        {
            if (FileUpload1.HasFile)
            {
                if (String.Compare(System.IO.Path.GetExtension(FileUpload1.FileName), ".doc", true) != 0 && String.Compare(System.IO.Path.GetExtension(FileUpload1.FileName), ".png", true) != 0 && String.Compare(System.IO.Path.GetExtension(FileUpload1.FileName), ".docx", true) != 0)
                {
                    lblMensagem.ForeColor = System.Drawing.Color.Red;
                    lblMensagem.Text = "Apenas arquivos com extensão .png, .doc e .docx são permitidos para envio";
                }
                else
                {
                    if (FileUpload1.PostedFile.ContentLength > 2048000)
                    {
                        lblMensagem.ForeColor = System.Drawing.Color.Red;
                        lblMensagem.Text = "Você pode enviar arquivos com até 2MB de tamanho.";
                    }
                    else
                    {
                        string nomeArquivo = System.IO.Path.GetFileNameWithoutExtension(FileUpload1.FileName) + DateTime.Now.ToString("ddMMyyyyhhmmss") + System.IO.Path.GetExtension(FileUpload1.FileName);
                        FazUploadArquivo(nomeArquivo);
                        CadastraSolicitacao(nomeArquivo);
                    }
                }

            }
            else
            {
                CadastraSolicitacao("");
            }
        }


        protected void FazUploadArquivo(string nomeArquivo)
        {
            string caminhoArquivo = Server.MapPath("~/intranet.net/cpd/printscreens/" + nomeArquivo);
            FileUpload1.SaveAs(caminhoArquivo);
        }

        protected void CadastraSolicitacao(string NomeArquivo)
        {
            try
            {
#if teste
                string idSolicitacao = Session["cod_lotacao"].ToString() + DateTime.Now.ToString("ddMMyyhhmmss");
#endif
                //------------APAGAR-----------------
                string idSolicitacao = "555";
                Session["cod_lotacao"] = "999";
                //-----------------------------------

                if (InsereSolicitacao(idSolicitacao, hfChapa.Value, int.Parse(Session["cod_lotacao"].ToString()), int.Parse(ddCodCategoriaProblema.SelectedValue), txtIP.Text, txtTombamento.Text, txtRelato.Text, txtRamal.Text, NomeArquivo, txtNomeMaquina.Text))
                {
                    lblMensagem.ForeColor = System.Drawing.Color.Blue;
                    lblMensagem.Text = "<hr />Solicitação cadastrada com sucesso!<br />Protocolo: " + idSolicitacao;
                    LimpaCampos();
                    lblSolicitadoPor.Text = Session["nome"].ToString();
                    hfChapa.Value = Session["chapa"].ToString();
                }
            }
            catch (Exception erro)
            {
                lblMensagem.ForeColor = System.Drawing.Color.Red;
                lblMensagem.Text = "Falha na inserção do registro.<br />Erro: " + erro.Message;
            }

        }

        private bool InsereSolicitacao(string idSolicitacao, string chapa, int codLotacao, int codCategoriaProblema, string ip, string tombamento, string relato, string ramal, string url, string nomeMaquina)
        {
            bool solicitacaoCadastrada = false;
            SqlConnection conexaoIntranet = new SqlConnection(ConfigurationManager.ConnectionStrings["conexao_intranet"].ConnectionString);
            try
            {
                if (conexaoIntranet != null && conexaoIntranet.State != ConnectionState.Open)
                    conexaoIntranet.Open();

                string instrucao = "INSERT INTO CPDHelpSolicitacoes (IDSolicitacao, Chapa, CodLotacao, CodCategoriaProblema, IP, Tombamento, Relato, Ramal, DataSolicitacao, Status, BaseConhecimento, URL, NomeMaquina) VALUES ('" + idSolicitacao + "','" + chapa + "', " + codLotacao.ToString() + ", " + ddCodCategoriaProblema.SelectedValue.ToString() + ", '" + ip + "', '" + tombamento + "', '" + relato + "', '" + ramal + "', GetDate(), 'AB', 0, '" + url + "', '" + nomeMaquina + "')";
                SqlCommand insereSolicitacao = new SqlCommand(instrucao, conexaoIntranet);
                solicitacaoCadastrada = (insereSolicitacao.ExecuteNonQuery() > 0);
            }
            finally
            {
                if (conexaoIntranet.State == ConnectionState.Open)
                    conexaoIntranet.Close();
            }

            return solicitacaoCadastrada;
        }

        protected void LimpaCampos()
        {
            txtRamal.Text = "";
            txtTombamento.Text = "";
            ddCodCategoriaProblema.SelectedIndex = -1;
            txtRelato.Text = "";
        }

        /// <summary>
        /// Responsável por buscar no banco de dados as informações referentes a 'CategoriaProblemas' do Senac e da Faculdade, depois armazená-las
        /// em seus devidos datatables para serem exibidos caso haja mudança no radiobutton.
        /// </summary>
        protected void CarregarTabelasDropDownList()
        {
            SqlConnection conexaoIntranet = new SqlConnection(ConfigurationManager.ConnectionStrings["conexao_intranet"].ConnectionString);
            try
            {
                if (conexaoIntranet != null && conexaoIntranet.State != ConnectionState.Open)
                    conexaoIntranet.Open();

                string sqlSenac = "SELECT * FROM CPDHelpCategoriaProblemas WHERE PertenceFaculdade = 0";
                SqlCommand selectSenac = new SqlCommand(sqlSenac, conexaoIntranet);
                SqlDataAdapter adapterSenac = new SqlDataAdapter(selectSenac);
                adapterSenac.Fill(dtSenac);

                string sqlFaculdade = "SELECT * FROM CPDHelpCategoriaProblemas WHERE PertenceFaculdade = 1";
                SqlCommand selectFaculdade = new SqlCommand(sqlFaculdade, conexaoIntranet);
                SqlDataAdapter adapterFaculdade = new SqlDataAdapter(selectFaculdade);
                adapterFaculdade.Fill(dtFaculdade);

            }
            finally
            {
                if (conexaoIntranet.State == ConnectionState.Open)
                    conexaoIntranet.Close();
            }
        }

        /// <summary>
        /// Responsável por fazer a mudança de conteúdo do dropdownlist. Entre Senac e Faculdade.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void rblLocal_Changed(Object sender, EventArgs e)
        {
            if (this.rblLocal.SelectedIndex == 0)
                this.ddCodCategoriaProblema.DataSource = dtSenac;
            else if (this.rblLocal.SelectedIndex == 1)
                this.ddCodCategoriaProblema.DataSource = dtFaculdade;

            this.ddCodCategoriaProblema.DataValueField = "CodCategoriaProblema";
            this.ddCodCategoriaProblema.DataTextField = "CategoriaProblema";
            this.ddCodCategoriaProblema.DataBind();
        }
    }
}